import com.mysql.cj.jdbc.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
/**
 * Created with IntelliJ IDEA.
 * Description:Java中与MySQL连接进行编程
 * User: 阿宾
 * Date: 2024-10-28
 * Time: 08:31
 */
public class Test1 {
    public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入id");
        int id = scanner.nextInt();
        System.out.println("请输入姓名");
        String name = scanner.next();
        //1.创建数据源头，用来表示数据库服务器所在的位置
        //其中javax.sql表示JDBC所在的包
        DataSource dataSource = new MysqlDataSource();//发生向上转型
        //这个参数写URL，也就是表示网络上的资源位置，也就是MySQL数据库的位置
        /**
         * jdbc:mysql表示这个URL是干什么的：是给jdbc操作mysql使用的
         * 127.0.0.1表示的网络上一个主机位置，此时的127.0.0.1表示环回ip，表示的是连接的主机是我们自己的电脑
         * 如果数据库服务器和应用程序不再一个主机中，这个时候就应该写这个主机ip
         * 3306：表示端口号
         * java109：表示要访问MySQL服务器上的哪个database
         *serverTimezone=UTC：这是版本8和版本5的区别，如果是版本5则不需要加，版本8则需要加
         */
        ((MysqlDataSource)dataSource).setUrl(
                "jdbc:mysql://127.0.0.1:3306/java109?serverTimezone=UTC&characterEncoding=utf8&useSSL=false");//发生向下转型
        //需要写MySQL登录的用户名和密码
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

        //2.和数据库服务器建立连接
        //首先要进行拨号，然后对方接听，这个过程就是建立连接 ，也就是请求-响应这个交互过程
        Connection connection = dataSource.getConnection();

        /*//3.构造sql语句，但是在此处的sql语句不用写;
        String sql = "insert into student2 values(4,'张三')";


        //预处理，也就是说检查这个sql语句是否正确，如果正确了，在发给MySQL数据库服务器
        //这样数据库服务器就省下解析的工作了
        PreparedStatement statement = connection.prepareStatement(sql);*/

        //也可以通过手动输入参数进行调整
        String sql = "insert into student2 values(?,?)";
        PreparedStatement statement = connection.prepareStatement(sql);
        //参数1写序号，从第几个位置开始，默认从1开始，没有0，参数2写要替换的值
        statement.setInt(1,id);
        statement.setString(2,name);


        //4.发给SQL语句到MySQL服务器中，执行SQL语句
        //返回值是一个整数，表示这个SQL语句影响到的行数
        int n = statement.executeUpdate();
        System.out.println("n = " + n);

        //5.关闭连接，释放资源
        statement.close();
        connection.close();


    }
}
